package com.stars.common.maps;

import java.util.*;
import java.util.Map.Entry;

/**
 * Map排序
 * 
 * @description Map排序
 * @author liuy
 * @version 1.0
 * @date:2017年1月3日下午7:34:44
 */
public class MapSort {
	/**
	 * 使用 Map按key进行排序
	 * 
	 * @param map
	 * @return
	 */
	public static Map<String, String> sortMapByKey(Map<String, String> map) {
		if (map == null || map.isEmpty()) {
			return null;
		}
		Map<String, String> sortMap = new TreeMap<String, String>(new MapKeyComparator());
		sortMap.putAll(map);
		return sortMap;
	}

	/**
	 * 使用 Map按key进行排序
	 * 
	 * @param map
	 * @return
	 */
	public static Map<String, Object> sortMapByKeyObject(Map<String, Object> map) {
		if (map == null || map.isEmpty()) {
			return null;
		}
		Map<String, Object> sortMap = new TreeMap<String, Object>(new MapKeyComparator());
		sortMap.putAll(map);
		return sortMap;
	}

	/**
	 * 
	 * @description 将map里的参数进行拼接,形式(&key=value)
	 * @author alex
	 * @date 2017年4月14日 下午5:17:41
	 * @version 1.0.0
	 * @param map
	 * @return
	 */
	public static String splicingHttpget(Map<String, Object> map) {
		Set<String> keySet = map.keySet();
		StringBuilder sb = new StringBuilder();
		for (String key : keySet) {// 空值不进行拼接
			if (null != map.get(key)) {
				sb.append(key).append("=").append(map.get(key)).append("&");
			}
		}
		return sb.toString();
	}
	
	/**
	 * 
	 * @description 将map里的参数进行拼接,形式(value+value)
	 * @author alex
	 * @date 2017年4月14日 下午5:17:41
	 * @version 1.0.0
	 * @param map
	 * @return
	 */
	public static String SplicingGet(Map<String, String> map) {
		map.remove("sign");//密文不参与拼接
		Set<String> keySet = map.keySet();
		StringBuilder sb = new StringBuilder();
		for (String key : keySet) {// 空值不进行拼接
			if (null != map.get(key)) {
				sb.append(map.get(key));
			}
		}
		return sb.toString();
	}


	/**
	 * 
	 * @description Map<String, String[]>转换成普通的map
	 * @author alex
	 * @date 2017年4月20日 上午3:17:58
	 * @version 1.0.0
	 * @param requestMap
	 * @return
	 */
	public static Map<String, String> getParamMap(Map<String, String[]> requestMap) {
		Map<String, String> paramMap = new HashMap<String, String>();
		Iterator<Entry<String, String[]>> it = requestMap.entrySet().iterator();
		while (it.hasNext()) {
			Entry<String, String[]> entry = it.next();
			if (entry.getValue().length == 1) {
				paramMap.put(entry.getKey(), entry.getValue()[0]);
			} else {
				String[] values = entry.getValue();
				String value = "";
				for (int i = 0; i < values.length; i++) {
					value = values[i] + ",";
				}
				value = value.substring(0, value.length() - 1);
				paramMap.put(entry.getKey(), value);
			}
		}
		return paramMap;
	}

	/**
	 *
	 * @description 将map里的参数进行拼接,形式(&key=value)
	 * @author Lee
	 * @date 2017年4月14日 下午5:17:41
	 * @version 1.0.0
	 * @param map
	 * @return
	 */
	public static String SplicingHttpgetByMapString(Map<String, String> map) {
		Set<String> keySet = map.keySet();
		StringBuilder sb = new StringBuilder();
		for (String key : keySet) {// 空值不进行拼接
			if (null != map.get(key) && !map.get(key).equals("")) {
				sb.append(key).append("=").append(map.get(key)).append("&");
			}
		}
		return sb.toString();
	}

	/**
	 * @Author：Lee
	 * @Description：将map里的参数进行拼接,形式(&key=value),并在最后拼接上传入的key值
	 * @Date：11:20 2018/1/16
	 * @param map
	 * @param key
	 * @return
	 */
	public static String splicingHttpgetByMapWithKey(Map<String, String> map, String key){
		StringBuilder stringBuilder = new StringBuilder(SplicingHttpgetByMapString(map));
		stringBuilder.append("key").append("=").append(key);
		return stringBuilder.toString();
	}
}
